iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Modern Web

自己開發一個~?系列 第 3

又是解釋程式碼

  • 分享至 

  • xImage
  •  

就是解釋JAVA程式碼~
/images/emoticon/emoticon04.gif

今天去參加一年一次"和風文化祭"
其實如果在日本的人也是可以去參加日本有關程式的活動~
連結如下~

https://engineercafe.connpass.com/event/296746/?utm_campaign=&utm_source=notifications&utm_medium=email&utm_content=title_link

回到正題~
今天要解釋的程式碼如下~是有包含兩個程式碼才可以跑出來
就是有父類跟子類

父類
程式碼

package Extends;

public class Master {
	//參數以父類為主,可傳入父或子類物件
	void feed(Animal a, Food f) {
		//instanceof:比對物件的類型
		if(a instanceof Animal) {			
			a.eat();
			new Food().showName();
		}
		else if(a instanceof Dog) {			
			a.eat();
			new Bone().showName();
		}else if(a instanceof Cat) {			
			a.eat();
			new Fish().showName();
		}
	}
}
//-----------------------------------
class Animal {
	int a = 100;
	void cry() {
		System.out.println("動物不會叫");
	}
	void eat() {
		System.out.println("動物吃肉");
	}
}

class Dog extends Animal {
	int a = 999;
	void cry() {
		System.out.println("狗狗汪汪叫");
	}
	void eat(){ System.out.println("狗狗吃肉骨頭"); }
	
}

class Cat extends Animal {
	void cry() {
		System.out.println("貓咪喵喵叫");
	}
	void eat() {
		System.out.println("貓咪吃魚");
	}
}
//-----------------------------------
class Food {
	void showName() {
		System.out.println("雜食");
	}
}

class Fish extends Food {
	void showName() {
		System.out.println("魚");
	}
}

class Bone extends Food {	
	 void showName(){ System.out.println("肉骨頭"); }	 
}

子類
程式碼

package Extends;

public class MasterPoly {

	public static void main(String[] args) {
		//多型基本用法:方法的使用
				//多型語法=> 父類型  變數名 = new 子類型();
				//左:變數類型,有限制意思,限制子類物件只能使用父類型有定義的名稱,包括屬性(值)/方法
				//右:實際操作的記憶體
				
				Animal a1 = new Dog();
				//Animal若沒有定義cry(),則a1物件無法呼叫
				//若可執行,則會執行子類物件的方法內容
				a1.cry();
				//多型語法在操作屬性時,會使用左邊父類的屬性與值
				System.out.println(a1.a);
				
//				Food f1 = new Fish();
//				f1.showName();
				
			}
		}

顯示
https://ithelp.ithome.com.tw/upload/images/20231018/20119035IzzTymde99.png


解釋程式碼
這段Java程式碼示範了繼承(Inheritance)和多態性(Polymorphism)的概念。我們來逐段解釋它:

  1. Master 類別是主類別,裡面有一個 feed 方法,用來餵食動物。這個方法接受兩個參數,Animal aFood f,代表要餵食的動物和食物。

  2. feed 方法中,使用 instanceof 運算符來比對傳入的 a 參數的類型。如果 aAnimal 的實例,就執行相對應的動作。如果是 Dog,則給狗狗餵食骨頭;如果是 Cat,則給貓咪餵食魚。

  3. Animal 類別是基礎類別,它有一個 cry 方法和一個 eat 方法。所有的動物都有 cry 方法,但 eat 方法是一個通用的實作,顯示 "動物吃肉"。

  4. DogCat 類別是 Animal 類別的子類別,它們繼承了 Animal 類別的特性,但也覆寫了 cryeat 方法。狗狗的 cry 方法顯示 "狗狗汪汪叫",並且覆寫了 eat 方法以顯示 "狗狗吃肉骨頭",而貓咪的 cry 方法顯示 "貓咪喵喵叫",並且覆寫了 eat 方法以顯示 "貓咪吃魚"。

  5. Food 類別是食物的基礎類別,有一個 showName 方法,顯示 "雜食"。

  6. FishBone 類別是 Food 類別的子類別,它們覆寫了 showName 方法,分別顯示 "魚" 和 "肉骨頭"。

總結來說,這段程式碼示範了物件導向編程中的繼承和多態性概念。不同類別的物件可以共用相同的方法名稱,但根據其實際的類別,執行不同的行為。在 feed 方法中,根據傳入的動物類別,選擇適當的食物來餵食。
/images/emoticon/emoticon08.gif
這個Java程式碼示範了多態性的基本概念。讓我們逐段解釋它:

  1. MasterPoly 類別的 main 方法中,我們看到多態性的使用範例。

  2. 以下這行程式碼:

    Animal a1 = new Dog();
    

    這表示我們創建了一個 Animal 類別的參考變數 a1,但我們實際上將它指向了一個 Dog 類別的物件。這就是多態性的一個重要特性,你可以使用父類別的參考變數來引用子類別的物件。

  3. 接下來,我們呼叫 a1.cry() 方法,即使 cry 方法是在 Animal 類別中定義的,但實際上執行的是 Dog 類別中覆寫(override)的 cry 方法。這是多態性的另一個示範,方法的執行取決於實際物件的類別。

  4. 最後,我們使用 System.out.println(a1.a) 來訪問 a1a 屬性。注意,a 是在 Animal 類別中定義的,但即使我們將 a1 指向了一個 Dog 物件,它仍然訪問到的是 Animal 類別中的 a 屬性值。多態性在操作屬性時使用的是參考變數的類別中的屬性值。

總結來說,這段程式碼示範了多態性的核心概念,允許你使用父類別的參考變數來操作子類別的物件,並且在運行時決定實際執行的方法。

/images/emoticon/emoticon08.gif

謝謝收看/images/emoticon/emoticon41.gif


上一篇
解釋從底開始~JAVA程式碼~
下一篇
JAVA程式碼~HashSet
系列文
自己開發一個~?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言